package main

import (
	"fmt"
)

func main() {
	fmt.Println("Are you Ok!")
	test01()
	test02()
	test03()
	fmt.Println()
	test04()

}

func test04() {
	//定义多维数组
	arr := [3][2]string{
		{"1", "Go语言入门"},
		{"2", "Go语言微服务架构核心"},
		{"3", "从0到Go语言微服务架构师"},
	}
	fmt.Println(arr)
}

func test03() {
	//特别注意数组的长度是类型的一部分，所以[3]int 和[5]int 是不同的类型
	arr1 := [3]int{1, 2, 3}
	arr2 := [5]int{1, 2, 3, 4, 5}
	fmt.Printf("arr1的类型: %T \t", arr1)
	fmt.Printf("arr2的类型: %T", arr2)
}

func test02() {
	//直接在声明时对数组进行初始化
	var arr1 = [5]int{15, 20, 35, 30, 35}
	fmt.Println("直接初始化：", arr1)

	//使用短声明
	arr2 := [5]int{15, 20, 35, 30, 36}
	fmt.Println("短声明：", arr2)

	//部分初始化，未初始化的为零值
	arr3 := [5]int{15, 20}
	fmt.Println("部分初始化：", arr3)

	//可以通过指定索引，方便地对数组某几个元素赋值
	arr4 := [5]int{1: 15, 4: 36}
	fmt.Println("索引指定：", arr4)

	//直接使用 ...让编译器为我们计算该数组的长度
	arr5 := [...]int{12, 24, 36, 76, 128, 256, 512}
	fmt.Println("不限长度：", arr5)
}

func test01() {
	//声明时没有指定数组元素的值，默认为零值
	var arr [5]int
	fmt.Println(arr)

	arr[0] = 1
	arr[1] = 2
	arr[2] = 3
	fmt.Println(arr)
}
